#include <stdio.h>
#include <stdlib.h>

typedef enum {false, true} bool;
typedef int ElemSet; /* 默认元素为整数*/

int CntSwaps(ElemSet *a, int *idx, int n) {
    /* 统计交换次数 */
    ElemSet t;
    int i, j, k, cnt;
    bool zero_in;

    cnt = 0; /* 初始化计数器 */
    for (i = 0; i < n; i++) {
        if (idx[i] != i) { /* 一个环的开始 */
            zero_in = (idx[i] == 0); /* 0在环中则为true */
            j = i;
            t = a[i]; /* 将第i个元素临时存放，相当于把0换到环里 */
            cnt++; /* 初始有1个元素 */
            while (idx[j] != i) { /* 当环没有结束 */
                /* 执行一次与0交换 */
                a[j] = a[idx[j]];
                k = idx[j];
                idx[j] = j;
                j = k;
                if (idx[j] == 0) {
                    zero_in = true; /* 0在环中则为true */
                }
                cnt++; /* 计数1次 */
            }
            a[j] = t;
            idx[j] = j;
            if (zero_in == true) {
                cnt--; /* 如果0在环中，则元素个数减1 */
            } else { /* 否则元素个数加1 */
                cnt++;
            }
        }
    }
    return cnt;
}

int main(void) {
    ElemSet *a; /* 数组a的下标从0开始 */
    int *idx; /* 元素索引 */
    int n, i;

    scanf("%d", &n);
    a = (ElemSet *)malloc(sizeof(ElemSet) * n);
    idx = (int *)malloc(sizeof(int) * n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        idx[a[i]] = i; /* 初始化索引 */
    }
    printf("%d\n", CntSwaps(a, idx, n));

    return 0;
}